package com.bjc.nio;

import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @program: nettypro
 * @description: MappedByteBuffer可以让文件直接在内存（堆外内存）修改，
 * 操作系统不需要拷贝一次  性能比较高
 * @author: bjc
 * @create: 2021-09-03 21:55
 */
public class MappedByteBufferTest {

    public static void main(String[] args) throws Exception{
        // rw  代表读写
        RandomAccessFile randomAccessFile = new RandomAccessFile("D:\\iotest_delete\\file01.txt", "rw");
        //获取对应的通道
        FileChannel channel = randomAccessFile.getChannel();

        /**
         * 参数1：FileChannel.MapMode.READ_WRITE 使用的是读写模式
         * 参数2：0 可以直接修改的起始位置
         * 参数3：5 是映射到内存的大小（并不是索引位置），即将1.txt的多少个字节映射到内存
         * 可以直接修改的范围就是0-5  (从0开始 修改5个)
         * 实际类型DirectByteBuffer
         */
        MappedByteBuffer mappedByteBuffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);

        mappedByteBuffer.put(0,(byte)'h');
        mappedByteBuffer.put(3,(byte)'9');
        randomAccessFile.close();
        System.out.println("修改成功");
    }
}
